Skip to content

feat(formatter): aceitar CNPJ alfanumerico (Reforma Tributaria 2026-07-01)#36

Open
rhfranzoni wants to merge 2 commits into
mainfrom
feat/cnpj-alphanumeric-formatter
Open

feat(formatter): aceitar CNPJ alfanumerico (Reforma Tributaria 2026-07-01)#36
rhfranzoni wants to merge 2 commits into
mainfrom
feat/cnpj-alphanumeric-formatter

Conversation

@rhfranzoni

@rhfranzoni rhfranzoni commented May 28, 2026

Copy link
Copy Markdown

Resumo

A SEFAZ vai aceitar CNPJ alfanumerico a partir de 2026-07-01 (LC 214/2025, IN RFB 2.229/2024). 12 primeiros caracteres podem conter letras maiusculas; 2 ultimos seguem como digitos verificadores numericos.

Hoje o Formatador.FormatarCnpj/FormatarCpfCnpj usa regex \d que rejeita letras — efeito pratico: a partir de 2026-07-01 o DANFE/cupom passa a renderizar CNPJ alfanumerico sem mascara visual, prejudicando legibilidade fiscal.

Mudancas

DanfeSharp/Formatador.cs

  • Regex CNPJ: 4 primeiros grupos passam de \d para [0-9A-Z]. Ultimo grupo (DV) permanece \d.
  • FormatarCpfCnpj: reescrita para decidir por comprimento da string limpa antes da regex (elimina ambiguidade entre CPF e CNPJ alfanumerico).
  • CPF regex: inalterada (CPF segue numerico por norma RFB).

DanfeSharp.Test/FormatadorTests.cs (novo)

30+ casos via DataTestMethod / DataRow:

  • Regressao: CNPJs/CPFs numericos legados.
  • Novos casos: CNPJ alfanumerico em multiplas posicoes (12ABC345000188, 98XYZ123000158).
  • Rejeicao: lowercase, DV alfabetico, comprimento invalido.
  • Edge cases: null, vazio, espacos, ja-formatado.

Validacao

  • DLL principal (DanfeSharp.csproj) compila sem erros.
  • Validacao via dotnet-script chamando Formatador.FormatarCnpj / FormatarCpfCnpj com 13 vetores: 13/13 OK.

Ressalva

O test project DanfeSharp.Test ja apresentava erros preexistentes de compilacao em FabricaFake.cs e DanfeTest.cs (DanfeCCC nao encontrado, conversao double->decimal) na branch main antes deste PR. Esses erros nao foram introduzidos aqui e nao tocam no codigo modificado. Como follow-up separado: corrigir o test project para que dotnet test rode completo.

Issues vinculadas

  • Closes #35 apos serem feitos os outros PRs derivados (esta e a primeira etapa).
  • Relacionada #33 (barcode CODE-128A/C com CNPJ alfanumerico) — esta PR resolve o requisito de tipagem; barcode em si segue como track paralelo.

Test plan

  • DLL compila
  • dotnet-script valida 13/13 vetores (CNPJ numerico, alfanumerico, CPF, edge cases)
  • CI do fork (se configurado) executa o test project corrigido
  • Revisor humano valida a regex e o switch por length

Breaking changes

Nenhuma:

  • CNPJs numericos legados formatam exatamente como antes.
  • Comprimento invalido devolve input trimado (sem exception) — mesmo contrato historico.
  • Null / vazio retornam string vazia — mesmo contrato historico.

Pessoas consumindo FormatarCnpj precisam estar preparadas para receber strings com letras no retorno a partir de 2026-07-01 — mas o tipo de retorno (string) e o formato visual (XX.XXX.XXX/XXXX-XX) sao os mesmos.

Generated with Claude Code (https://claude.com/claude-code)


Relates to #33 (requisito de tipagem do CNPJ alfanumérico; barcode CODE-128A/C segue como track paralelo — issue permanece aberta).

Loading
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants